package leetcode.code0594;

import java.util.HashMap;
import java.util.Map;

public class Solution_HashMap extends Solution594 {

	@Override
	public int findLHS(int[] nums) {
		int ans = 0;
//		Integer[0] = 数量 ， Integer[1] = 几种 ， Integer[2] = 第一种的数是什么
//      map中就放num 和 num -1，如num == 5， 可能存在两组一组(5,6)，一组(4,5); add(5)和add(4)
		Map<Integer, Integer[]> map = new HashMap<>();
		for (int num : nums) {
			ans = this.add(map, num, num, ans);
			ans = this.add(map, num - 1, num, ans);
		}
		return ans;
	}

	private int add(Map<Integer, Integer[]> map, int key, int num, int ans) {
		Integer[] ans1 = map.getOrDefault(key, new Integer[] { 0 });
		int a0 = 0;
		int a1 = 0;
		int a2 = 0;
		if ((a0 = ans1[0]) == 0) {// 新来的
			map.put(key, new Integer[] { 1, 1, num });
		} else if ((a1 = ans1[1]) == 1 && (a2 = ans1[2]) == num) {// 1种先放着
			map.put(key, new Integer[] { a0 + 1, a1, a2 });
		} else {// 两种开始收答案
			map.put(key, new Integer[] { ++a0, 2 });
			ans = Math.max(a0, ans);
		}
		return ans;
	}

	public static void main(String[] args) {
		Solution_HashMap so = new Solution_HashMap();
		so.debug1();
		so.debug2();
		so.debug3();
		so.debug4();

	}

}
